#!/usr/bin/env bash
#-------------------------------------------------------
#	FileName	: Bash读取ini文件.sh
#	Author		：hpy
#	Date		：2020年11月08日
#	Description	：
#------------------------------------------------------- 


#############################################################
#函数 ReadIni_pro 
#读取ini文件
#参数1：ini文件
#参数2：Section
#参数3：option / key
#当找到匹配的key时，返回状态码：0，并 echo 结果 ，否则返回状态码 ：2 
#该版本会自动过滤注释，查找时不会超过 section 段
function ReadIni_pro(){
    iniFile=$1 && Section=$2 && Key=$3 
    startLine=$(grep -n "\[$Section\]" $iniFile | cut -d ':' -f1)
    test ${#startLine} -eq  0 && return 2
    endLine=$(cat $iniFile | tail -n +$startLine | grep -n "\[*\]" | sed -n '2p' | cut -d ':' -f1)
    test ${#endLine} -eq 0 && endLine=$(cat $iniFile | wc -l)
    var=$(tail -n +$startLine $iniFile|head -$endLine|\
    awk -F '=' '/\['$Section'\]/{a=1}a==1&&$1~/'$Key'/{print $2;exit}')
    var=$(echo $var | cut -d'#' -f1)  #去除 # 注释部分
    var=$(echo $var | cut -d';' -f1)  #去除 ； 注释部分
    test ${#var} -gt  0 && echo $var  || return 2 #找到值就echo 否则返回代码 1 
}
###############################################################
#读取ini文件
#参数1：ini文件
#参数2：Section
#参数3：option / key
# 这是一个简单版本的函数
function ReadIni()  
{   
	Key=$3
	Section=$2
  	Configfile=$1
	var=$(awk -F '=' '/\['$Section'\]/{a=1}a==1&&$1~/'$Key'/{print $2;exit}' $Configfile)  
 	var=$(echo $var | cut -d'#' -f1)  #去除 # 注释部分
    var=$(echo $var | cut -d';' -f1)  #去除 ； 注释部分
    echo "$var"  
} 


main(){
    cd $(dirname $0) #切换到本脚本所在的路径
    iniFilePath="./test.ini"  #ini文件名称
    section="s1"   #Section 
    option="Setup"  #Option

    echo "用于测试的ini文件内容："
    echo +++++++++++++++
    cat $iniFilePath
    echo +++++++++++++++
    value=$(ReadIni $iniFilePath $section $option)
    echo "[$section]下的 $option 属性为 ： $value"

 
    echo "用于测试的ini文件内容："
    echo +++++++++++++++++++++++++++++++++++
    cat $iniFilePath
    echo +++++++++++++++++++++++++++++++++++
    var=$(ReadIni_pro $iniFilePath $section $option) #调用 ini文件 读取函数
    test $? -eq 0 && echo "[$section]下的 $option 属性为 ： $value" || echo "没找到对应值！"
}


main #调用主函数
